<?php

declare(strict_types=1);

namespace App\Master\Framework\Library\Easywechat;

use App\Master\Framework\Library\Extend\Module;
use EasyWeChat\OfficialAccount\Application;

/**
 * 微信小程序开发组
 * class MiniAppService
 */
class OfficialService extends EasyModule
{
    /**
     * @var Application
     */
    private Application $app;
    private array       $config;

    /**
     * 实例化
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
     */
    public function __construct()
    {
        parent::__construct();
        // 微信开发配置
        $_table = "EasywechatConfig";
        $config = Cache::remember("OFFICIAL_SERVICE_{$_table}", $this->ttl, function () use ($_table) {
            $module = Module::_SetupModule($_table);
            return $module['official'] ?? [];
        });

        $config = [
            'app_id'  => $config['app_id'] ?? '',
            'secret'  => $config['app_secret'] ?? '',
            'token'   => $config['token'] ?? '',
            'aes_key' => $config['aes_key'] ?? '',
            /**
             * 接口请求相关配置，超时时间等，具体可用参数请参考：
             * https://github.com/symfony/symfony/blob/5.3/src/Symfony/Contracts/HttpClient/HttpClientInterface.php
             */
            'http'    => [
                'throw'   => true, // 状态码非 200、300 时是否抛出异常，默认为开启
                'timeout' => 5.0,
                'retry'   => true, // 使用默认重试配置
            ],
        ];

        $this->config = $config;
        $this->app    = new Application($config);
    }
}